-- 商店模块
local ConfigLoader = require("config.loader")
local Settings = require("config.settings")
local config = ConfigLoader.load(Settings.CURRENT_GAME)
local logger = require "utils.logger"
local stateManager = require "utils.state_manager"
local inventory = require "modules.inventory"
local tslib = require "TSLib"

local Shop = {}

-- 处理商店操作
function Shop.handleShop()
    logger.info("处理商店操作")

    -- 检查是否在商店状态
    if not stateManager.isInState(stateManager.States.IN_SHOP) then
        logger.warn("不在商店状态，无法处理商店操作")
        return
    end

    -- 检查并购买所需物品
    Shop.checkAndBuyItems()
end

-- 打开商店
function Shop.openShop()
    logger.info("打开商店")
    tap(config.SHOP.OPEN_SHOP_COORDS[1], config.SHOP.OPEN_SHOP_COORDS[2])
    mSleep(config.SHOP.OPEN_SHOP_COORDS[3])
end

-- 关闭商店
function Shop.closeShop()
    logger.info("关闭商店")
    tap(config.SHOP.CLOSE_SHOP_COORDS[1], config.SHOP.CLOSE_SHOP_COORDS[2])
    mSleep(config.SHOP.CLOSE_SHOP_COORDS[3])
end

-- 检查并购买物品
function Shop.checkAndBuyItems()
    -- 检查回城石
    if not inventory.hasItem(0xc220b2, "0|0|0xc220b2,10|-1|0xd50cd6,18|7|0x981cc2") then
        Shop.buyItem("TOWN_STONE")
    end

    -- 检查红药
    if not inventory.hasItem(0x80634a, "-2|15|0x4d7aa4,14|16|0x183867,17|3|0xf3d43e") then
        Shop.buyItem("RED_POTION", 5)  -- 购买5个
    end

    -- 检查蓝药
    if not inventory.hasItem(0x80634a, "-2|15|0x4d7aa4,14|16|0x183867,17|3|0xf3d43e") then
        Shop.buyItem("BLUE_POTION", 5)  -- 购买5个
    end

    -- 检查太阳水
    if not inventory.hasItem(0x80634a, "-2|15|0x4d7aa4,14|16|0x183867,17|3|0xf3d43e") then
        Shop.buyItem("SUN_POTION", 5)  -- 购买5个
    end
end

-- 购买指定物品
function Shop.buyItem(itemType, count)
    logger.info("购买物品", {itemType, count})

    -- 获取物品坐标
    local itemCoords = config.SHOP.ITEMS[itemType]
    if not itemCoords then
        logger.error("未知物品类型", itemType)
        return
    end

    -- 点击物品
    tap(itemCoords[1], itemCoords[2])
    mSleep(1000)

    -- 如果指定了数量，点击加号按钮
    if count and count > 1 then
        for i = 1, count - 1 do
            tap(1184, 409)  -- 加号按钮坐标
            mSleep(100)
        end
    end

    -- 点击购买按钮
    tap(1095, 594)  -- 购买按钮坐标
    mSleep(1000)
end

-- 检查商店是否打开
function Shop.isShopOpen()
    -- 这里需要根据实际游戏界面添加检测逻辑
    -- 例如检查商店界面的特征点
    return false
end

return Shop